package cn.com.dstz.utils;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.StringTokenizer;

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;

import org.apache.commons.lang.StringUtils;

public final class Common{
	private static StringBuilder sb = new StringBuilder( );

	private Common( ) {
	}

	/**
	 * 泛型转换， 避免N次的显式转换，转换不成功则返回null 主要是针对查询数据中，Map< String, Object >
	 * 最好的解决方式就是重新写一个Map.. 不必经过这么多次的繁琐
	 */
	@SuppressWarnings( "unchecked" )
	public static < T > T convert( Object value ) {
		if( value == null ){
			return null;
		}
		return ( T ) value;
	}

	/**
	 * 从ip的字符串形式得到字节数组形式
	 * 
	 * @param ip
	 *            字符串形式的ip
	 * @return 字节数组形式的ip
	 */
	public static byte [ ] getIpByteArrayFromString( String ip ) {
		byte [ ] ret = new byte [ 4 ];
		StringTokenizer st = new StringTokenizer( ip, "." );
		try{
			ret[ 0 ] = ( byte ) ( Integer.parseInt( st.nextToken( ) ) & 0xFF );
			ret[ 1 ] = ( byte ) ( Integer.parseInt( st.nextToken( ) ) & 0xFF );
			ret[ 2 ] = ( byte ) ( Integer.parseInt( st.nextToken( ) ) & 0xFF );
			ret[ 3 ] = ( byte ) ( Integer.parseInt( st.nextToken( ) ) & 0xFF );
		}catch( Exception e ){
			// LogFactory.log("从ip的字符串形式得到字节数组形式报错", Level.ERROR, e);
		}
		return ret;
	}

	/**
	 * @param ip
	 *            ip的字节数组形式
	 * @return 字符串形式的ip
	 */
	public static String getIpStringFromBytes( byte [ ] ip ) {
		sb.delete( 0, sb.length( ) );
		sb.append( ip[ 0 ] & 0xFF );
		sb.append( '.' );
		sb.append( ip[ 1 ] & 0xFF );
		sb.append( '.' );
		sb.append( ip[ 2 ] & 0xFF );
		sb.append( '.' );
		sb.append( ip[ 3 ] & 0xFF );
		return sb.toString( );
	}

	/**
	 * 根据某种编码方式将字节数组转换成字符串
	 * 
	 * @param b
	 *            字节数组
	 * @param offset
	 *            要转换的起始位置
	 * @param len
	 *            要转换的长度
	 * @param encoding
	 *            编码方式
	 * @return 如果encoding不支持，返回一个缺省编码的字符串
	 */
	public static String getString( byte [ ] b, int offset, int len, String encoding ) {
		try{
			return new String( b, offset, len, encoding );
		}catch( UnsupportedEncodingException e ){
			return new String( b, offset, len );
		}
	}
	
	public static String getImageType(File imgFile) {
		String imageType = null;
		try {
			ImageInputStream iis = ImageIO.createImageInputStream(imgFile);
			Iterator<ImageReader> iter = ImageIO.getImageReaders(iis);
			if (iter.hasNext()) {
				ImageReader reader = iter.next();
				imageType = reader.getFormatName().toLowerCase();
			}
			iis.close();
		} catch (IOException e) {
		}
		return imageType;
	}
	
	/**
	 * 获取图片资源的文件, 其中gif文件将不会生成缩略图，文件不符合条件不会生成缩略图
	 * @param file
	 * @return
	 */
	public static String getThumb( String file ){
		if( StringUtils.isBlank( file ) || file.contains( ".txt" )){
			return "/hd_v2/images/no_picture.gif";
		}
		return file + ".thumb.jpg";
	}
	
	
	
}
